// nodejs的http模块
const {createServer} = require('http')

const {Server} = require('socket.io')

// 创建一个http服务
const app = createServer()

// 创建socket服务：把http服务升级成websocket协议的
const IO = new Server(app, {
  path: '/socket'
})
// 创建一个聊天室对象
const chatRoom = {}

// 监听链接socket服务链接成功的事件
IO.on('connection', (socket) => {
  // console.log('客户端链接我(服务端)连接成功了')
  const userId = socket.handshake.query.id
  console.log(`用户${userId}链接成功了，他在服务端的scoekt(喇叭)id是${socket.id}`)
  chatRoom[userId] = socket.id
  console.log('现在聊天室对象是' + JSON.stringify(chatRoom))

  // 服务端注册一个事件用来接收消息
  socket.on('sendMsg',(info) => {
    console.log('服务端接收到了消息,消息内容是' + JSON.stringify(info))
    const {toId} = info 
    const toSocketId = chatRoom[toId]
    // 
    socket.to(toSocketId).emit('reciveMsg', info)
  })
  // 服务端注册一个ping事件
  socket.on('ping', () => {
    // 服务端接收到客户端触发的ping事件，里面触发客户端的pang事件完成一次心跳检测
    socket.emit('pang')
    console.log('聊天室里面有',JSON.stringify(chatRoom))
  })
  // 服务端监听链接挂掉
  socket.on('disconnect', () => {
    // 遍历聊天室对象，找到对应的socketId
    console.log(socket.id)
    for (let key in chatRoom) {
      if(chatRoom[key]===socket.id) {
        delete chatRoom[key]
      }
    }
  })
})

app.listen(3000, () => {
  console.log('服务启动成功了')
})